package io.filestream.filter;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamTest {
	
	public void writePrimitiveData(String fileName) throws IOException  {
		//매개변수로 받은 파일에 프리미티브 타입 데이터를 저장
		int intNum = 300000000;
		boolean flag = false;
		double doubleNum = 3010.20;
		DataOutputStream dos = null;//예를 트라이 블락 안에다가 선언을 하면 파이널리에서 끊을 수가 없다.
		try{
			dos = new DataOutputStream(new FileOutputStream(fileName));
			//DataOutputStream - 프리미티브 타입/스트링을 출력하는 기능
			dos.writeInt(intNum);
			dos.writeBoolean(flag);
			dos.writeDouble(doubleNum);
			dos.writeUTF("문자열 출력");//문자열 값을 출력
			System.out.println("출력완료");
		}finally {
			if(dos != null){
				dos.close();
			}
		}
	}
	
	public void readprimitiveData(String fileName) throws IOException{
		//매개변수받은 파일에 저장된 프리미티브 값을 읽는 메소드\
		DataInputStream dis = null;
		try {
			//1. 연결 + 필터스트림(DataInputStream) 추가
			dis = new DataInputStream(new FileInputStream(fileName));
			//2. 입력작업
			int intNum = dis.readInt();
			boolean flag = dis.readBoolean();
			double doubleNum  = dis.readDouble();
			String str = dis.readUTF();
			System.out.println(intNum+"  -"+flag+" -   "+doubleNum+"  -    "+str);
		}finally{
			if(dis != null){//이 중괄호는 내용이 하나라면 안넣어두 된다. 예들 들어 if(dis = null) dis.close();
				dis.close();
			}
		}
	}
	public static void main(String[] args) throws IOException {
		DataStreamTest ds = new DataStreamTest();
		String fileName = "C:\\day\\prmitive.dat";
		//ds.writePrimitiveData(fileName);
		ds.readprimitiveData(fileName);
	}
}
